package com.uniview.util.mail;

import java.util.List;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

/**
 * 简单邮件（不带附件的邮件）发送器
 * 
 * @author Qingtian Lei
 * @date 创建时间：2018年09月03日
 * @version
 */
@Service("simpleMailSender")
public class SimpleMailSender {
	
	private final transient Properties props = System.getProperties();

	private transient MailAuthenticator authenticator;
	 
	private transient Session session;
	
	@Value("#{configProperties['ms.MAIL_SMTP_HOST']}")
	private String MAIL_SMTP_HOST;
	
	@Value("#{configProperties['ms.MAIL_SMTP_PORT']}")
	private String MAIL_SMTP_PORT;
	
	@Value("#{configProperties['ms.MAIL_SMTP_AUTH']}")
	private String MAIL_SMTP_AUTH;
	
	@Value("#{configProperties['ms.USERNAME']}")
	private String USERNAME;
	
	@Value("#{configProperties['ms.PASSWORD']}")
	private String PASSWORD;
	
	
	public SimpleMailSender() {
	}

	/**
	 * 初始化
	 * 
	 * 创建时间：2017年2月28日
	 * 
	 * @author HY
	 * @param smtpHostName
	 *            SMTP服务器地址
	 * @param username
	 *            发送邮件的用户名（邮箱地址）
	 * @param password
	 *            密码
	 */
	public void init() {
		// 初始化Properties
		props.put("mail.smtp.host", MAIL_SMTP_HOST);
		props.put("mail.smtp.port", MAIL_SMTP_PORT);
		props.put("mail.smtp.auth", MAIL_SMTP_AUTH);
		// 验证发送者账户密码
		authenticator = new MailAuthenticator(USERNAME, PASSWORD);
		// 创建Session
		session = Session.getInstance(props, authenticator);
	}
	
	
	/**
	 * 发送邮件（单发）
	 * 
	 * 创建时间：2018年09月03日
	 * 
	 * @author Qingtian Lei
	 * @param recipient
	 *            收件人邮箱地址
	 * @param subject
	 *            邮件主题
	 * @param content
	 *            邮箱内容
	 * @throws AddressException
	 * @throws MessagingException
	 */
	public void send(String recipient, String subject, Object content) throws AddressException, MessagingException {
		// 1.创建mime类型邮件
		final Message message = new MimeMessage(session);
		// 2.设置发件人
		message.setFrom(new InternetAddress(authenticator.getUsername()));
		// 3.设置收件人
		message.setRecipient(RecipientType.TO, new InternetAddress(recipient));
		// 4.设置邮件主题
		message.setSubject(subject);
		// 5.设置邮件内容
		message.setContent(content.toString(), "text/html;charset=utf-8");
		// 6.发送
		Transport.send(message);
	}

	/**
	 * 群发邮件
	 * 
	 * 创建时间：2018年09月03日
	 * 
	 * @author Qingtian Lei
	 * @param recipients
	 *            多个收件人（邮箱地址集合）
	 * @param subject
	 *            邮件主题
	 * @param content
	 *            邮件内容
	 * @throws AddressException
	 * @throws MessagingException
	 */
	public void send(List<String> recipients, String subject, Object content) throws AddressException, MessagingException {
		// 1.创建mime类型邮件
		final Message message = new MimeMessage(session);
		// 2.设置发件人
		message.setFrom(new InternetAddress(authenticator.getUsername()));
		// 3.设置收件人
		final int num = recipients.size();
		InternetAddress[] addresses = new InternetAddress[num];
		for (int i = 0; i < num; i++) {
			addresses[i] = new InternetAddress(recipients.get(i));
		}
		message.setRecipients(RecipientType.TO, addresses);
		// 4.设置邮件主题
		message.setSubject(subject);
		// 5.设置邮件内容
		message.setContent(content.toString(), "text/html;charset=utf-8");
		// 6.发送
		Transport.send(message);
	}
 


}
